林嶔 (Lin, Chin)
Lesson 4
– 一般來說,資料進來以後我們會設定驗證規則,如果不符合此一規則就刪除或重新檢視。
不正確的數據(Incorrect data):如年齡>130歲
不準確的數據(Inaccurate data):如年齡實際為50歲的人,被紀錄為60歲
重複的數據(Duplicate data):如重複key-in的問卷
不完整的數據(Incomplete data):不該遺漏而遺漏的數據
不一致的數據(Inconsistent data):如洗腎患者腎絲球過濾率卻有90 ml/min/1.73m2
違反規則(Rule violations):如收案日期為2010年以前,卻出現2013年的資料
– 這個資料是由門診護理師Key-in填入,按照計劃目標,所有病人每3個月追蹤一次(低於3個月不能給補助)。
– 現在你是腎臟醫學會核發衛教補助的承辦人員,你希望了解一下哪些紀錄是有問題的,而找到這些紀錄後你將要通知該醫院的門診護理師,請他再查閱紙本資料後重新Key-in
dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950')
head(dat)
## Patient Date MDRD.GFR Stage WBC RBC HB Hct MCV Urea.Nitrogen
## 1 1472 2011/5/31 15.9 4 10.10 2.76 8.7 27.0 98.0 75
## 2 1472 2011/8/8 24.0 4 5.79 1.80 5.7 17.9 99.4 41
## 3 1472 2011/10/17 22.7 4 5.20 2.44 7.8 23.0 94.3 49
## 4 1472 2012/1/10 18.7 4 12.99 2.95 9.4 28.2 95.6 46
## 5 1472 2013/5/14 30.4 3 6.78 3.02 9.7 30.0 99.3 48
## 6 1472 2013/8/22 26.8 4 6.88 3.73 8.6 26.0 95.2 82
## Creatinine Uric.Acid Na K Albumin
## 1 3.0 3.9 139 3.3 4.2
## 2 2.1 4.8 143 4.6 4.2
## 3 2.2 4.7 146 4.8 4.5
## 4 2.6 4.0 141 4.2 4.6
## 5 1.7 3.9 141 4.4 4.1
## 6 1.9 3.0 138 4.1 4.3
class(dat[,"Date"])
## [1] "factor"
dat$Date = as.Date(dat[,"Date"])
test.date = c("2011/01/05", "2011/09/31", "2011/02/29", "2016/02/29")
test.date = as.Date(test.date)
test.date
## [1] "2011-01-05" NA NA "2016-02-29"
dat$Wrong.Date = is.na(dat$Date)
dat[dat$Wrong.Date == TRUE,]
## [1] Patient Date MDRD.GFR Stage WBC
## [6] RBC HB Hct MCV Urea.Nitrogen
## [11] Creatinine Uric.Acid Na K Albumin
## [16] Wrong.Date
## <0 rows> (or 0-length row.names)
– 我們稍微整理一下規則1的程式碼,老師會把這串程式碼整理成這樣
#Read data
dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950')
#Rule 1: check date-format
dat$Date = as.Date(dat[,"Date"])
dat$Wrong.Date = is.na(dat$Date)
#dat[dat$Wrong.Date == TRUE,]
#Rule 2: ...
– 可以利用之前學過的函數「%in%」,還記得怎麼用嗎?
dat$Wrong.Stage = !dat$Stage %in% 1:5
– 索引函數可以幫助我們設定規則,値得注意的是,未來如果我們想要將連續變項『血壓値』轉換為類別變項『高血壓』時,可以透過類似的方式。
dat$Wrong.GFR[dat$MDRD.GFR>150 | dat$MDRD.GFR<0] = TRUE
dat$Wrong.GFR[dat$MDRD.GFR<=150 & dat$MDRD.GFR>=0] = FALSE
dat[dat$Wrong.GFR == TRUE, c("Patient", "Date", "MDRD.GFR", "Stage", "Wrong.GFR")]
## Patient Date MDRD.GFR Stage Wrong.GFR
## NA NA <NA> NA NA NA
## NA.1 NA <NA> NA NA NA
## NA.2 NA <NA> NA NA NA
## NA.3 NA <NA> NA NA NA
## NA.4 NA <NA> NA NA NA
## NA.5 NA <NA> NA NA NA
## NA.6 NA <NA> NA NA NA
## NA.7 NA <NA> NA NA NA
## NA.8 NA <NA> NA NA NA
## NA.9 NA <NA> NA NA NA
## NA.10 NA <NA> NA NA NA
## NA.11 NA <NA> NA NA NA
## NA.12 NA <NA> NA NA NA
## NA.13 NA <NA> NA NA NA
## NA.14 NA <NA> NA NA NA
## NA.15 NA <NA> NA NA NA
## NA.16 NA <NA> NA NA NA
## NA.17 NA <NA> NA NA NA
## NA.18 NA <NA> NA NA NA
## NA.19 NA <NA> NA NA NA
## NA.20 NA <NA> NA NA NA
## NA.21 NA <NA> NA NA NA
## NA.22 NA <NA> NA NA NA
## NA.23 NA <NA> NA NA NA
## NA.24 NA <NA> NA NA NA
## NA.25 NA <NA> NA NA NA
## NA.26 NA <NA> NA NA NA
## NA.27 NA <NA> NA NA NA
## NA.28 NA <NA> NA NA NA
## NA.29 NA <NA> NA NA NA
## NA.30 NA <NA> NA NA NA
## NA.31 NA <NA> NA NA NA
## NA.32 NA <NA> NA NA NA
## NA.33 NA <NA> NA NA NA
## NA.34 NA <NA> NA NA NA
## NA.35 NA <NA> NA NA NA
## NA.36 NA <NA> NA NA NA
## NA.37 NA <NA> NA NA NA
## NA.38 NA <NA> NA NA NA
## NA.39 NA <NA> NA NA NA
## NA.40 NA <NA> NA NA NA
## NA.41 NA <NA> NA NA NA
## NA.42 NA <NA> NA NA NA
## NA.43 NA <NA> NA NA NA
## NA.44 NA <NA> NA NA NA
## NA.45 NA <NA> NA NA NA
## NA.46 NA <NA> NA NA NA
## NA.47 NA <NA> NA NA NA
## NA.48 NA <NA> NA NA NA
## NA.49 NA <NA> NA NA NA
## NA.50 NA <NA> NA NA NA
## NA.51 NA <NA> NA NA NA
## NA.52 NA <NA> NA NA NA
## NA.53 NA <NA> NA NA NA
## NA.54 NA <NA> NA NA NA
## NA.55 NA <NA> NA NA NA
## NA.56 NA <NA> NA NA NA
## NA.57 NA <NA> NA NA NA
## NA.58 NA <NA> NA NA NA
## NA.59 NA <NA> NA NA NA
## NA.60 NA <NA> NA NA NA
## NA.61 NA <NA> NA NA NA
## NA.62 NA <NA> NA NA NA
## NA.63 NA <NA> NA NA NA
## NA.64 NA <NA> NA NA NA
## NA.65 NA <NA> NA NA NA
## NA.66 NA <NA> NA NA NA
## NA.67 NA <NA> NA NA NA
## NA.68 NA <NA> NA NA NA
## NA.69 NA <NA> NA NA NA
## NA.70 NA <NA> NA NA NA
## NA.71 NA <NA> NA NA NA
## NA.72 NA <NA> NA NA NA
## NA.73 NA <NA> NA NA NA
## NA.74 NA <NA> NA NA NA
## NA.75 NA <NA> NA NA NA
## NA.76 NA <NA> NA NA NA
## NA.77 NA <NA> NA NA NA
## NA.78 NA <NA> NA NA NA
## NA.79 NA <NA> NA NA NA
## NA.80 NA <NA> NA NA NA
## NA.81 NA <NA> NA NA NA
## NA.82 NA <NA> NA NA NA
## NA.83 NA <NA> NA NA NA
## NA.84 NA <NA> NA NA NA
## NA.85 NA <NA> NA NA NA
## NA.86 NA <NA> NA NA NA
## NA.87 NA <NA> NA NA NA
## NA.88 NA <NA> NA NA NA
## NA.89 NA <NA> NA NA NA
## NA.90 NA <NA> NA NA NA
## NA.91 NA <NA> NA NA NA
## NA.92 NA <NA> NA NA NA
## NA.93 NA <NA> NA NA NA
## NA.94 NA <NA> NA NA NA
## NA.95 NA <NA> NA NA NA
## NA.96 NA <NA> NA NA NA
## NA.97 NA <NA> NA NA NA
## NA.98 NA <NA> NA NA NA
## 5846 1118 2009-11-12 227.7 1 TRUE
## 5847 1118 2014-03-10 217.1 1 TRUE
## 5848 1118 2014-06-16 175.9 1 TRUE
## NA.99 NA <NA> NA NA NA
## 6019 1290 2010-09-19 190.9 1 TRUE
## 6020 1290 2010-11-16 190.9 1 TRUE
## 6021 1290 2010-12-15 190.9 1 TRUE
## 6022 1290 2011-03-07 189.9 1 TRUE
## 6023 1290 2011-05-31 189.9 1 TRUE
## 6024 1290 2011-08-27 189.9 1 TRUE
## 6025 1290 2011-11-15 189.9 1 TRUE
## NA.100 NA <NA> NA NA NA
## NA.101 NA <NA> NA NA NA
## NA.102 NA <NA> NA NA NA
## NA.103 NA <NA> NA NA NA
## NA.104 NA <NA> NA NA NA
## NA.105 NA <NA> NA NA NA
## NA.106 NA <NA> NA NA NA
## NA.107 NA <NA> NA NA NA
## NA.108 NA <NA> NA NA NA
## NA.109 NA <NA> NA NA NA
## NA.110 NA <NA> NA NA NA
## NA.111 NA <NA> NA NA NA
## NA.112 NA <NA> NA NA NA
## NA.113 NA <NA> NA NA NA
## NA.114 NA <NA> NA NA NA
## NA.115 NA <NA> NA NA NA
## NA.116 NA <NA> NA NA NA
## NA.117 NA <NA> NA NA NA
## NA.118 NA <NA> NA NA NA
## NA.119 NA <NA> NA NA NA
## NA.120 NA <NA> NA NA NA
## NA.121 NA <NA> NA NA NA
## NA.122 NA <NA> NA NA NA
## NA.123 NA <NA> NA NA NA
## NA.124 NA <NA> NA NA NA
## NA.125 NA <NA> NA NA NA
## NA.126 NA <NA> NA NA NA
## 7795 844 2009-02-04 177.5 1 TRUE
## 7799 844 2010-03-10 175.9 1 TRUE
## NA.127 NA <NA> NA NA NA
## NA.128 NA <NA> NA NA NA
## NA.129 NA <NA> NA NA NA
## NA.130 NA <NA> NA NA NA
## NA.131 NA <NA> NA NA NA
## NA.132 NA <NA> NA NA NA
## NA.133 NA <NA> NA NA NA
## NA.134 NA <NA> NA NA NA
## NA.135 NA <NA> NA NA NA
## NA.136 NA <NA> NA NA NA
## NA.137 NA <NA> NA NA NA
## 8260 1879 2012-08-15 162.0 1 TRUE
## NA.138 NA <NA> NA NA NA
## NA.139 NA <NA> NA NA NA
## NA.140 NA <NA> NA NA NA
## NA.141 NA <NA> NA NA NA
## NA.142 NA <NA> NA NA NA
## NA.143 NA <NA> NA NA NA
## NA.144 NA <NA> NA NA NA
## NA.145 NA <NA> NA NA NA
## NA.146 NA <NA> NA NA NA
## NA.147 NA <NA> NA NA NA
## NA.148 NA <NA> NA NA NA
## NA.149 NA <NA> NA NA NA
## NA.150 NA <NA> NA NA NA
## NA.151 NA <NA> NA NA NA
## NA.152 NA <NA> NA NA NA
## NA.153 NA <NA> NA NA NA
## NA.154 NA <NA> NA NA NA
## NA.155 NA <NA> NA NA NA
## NA.156 NA <NA> NA NA NA
## NA.157 NA <NA> NA NA NA
## NA.158 NA <NA> NA NA NA
## NA.159 NA <NA> NA NA NA
## NA.160 NA <NA> NA NA NA
## NA.161 NA <NA> NA NA NA
## NA.162 NA <NA> NA NA NA
## NA.163 NA <NA> NA NA NA
## NA.164 NA <NA> NA NA NA
## NA.165 NA <NA> NA NA NA
## NA.166 NA <NA> NA NA NA
## NA.167 NA <NA> NA NA NA
## NA.168 NA <NA> NA NA NA
## NA.169 NA <NA> NA NA NA
## NA.170 NA <NA> NA NA NA
## NA.171 NA <NA> NA NA NA
## NA.172 NA <NA> NA NA NA
## NA.173 NA <NA> NA NA NA
## 9464 397 2007-07-02 226.3 1 TRUE
## 9465 397 2007-07-16 174.9 1 TRUE
## NA.174 NA <NA> NA NA NA
## 9467 397 2007-07-30 174.9 1 TRUE
## 9468 397 2007-08-13 174.9 1 TRUE
## 9469 397 2007-09-03 226.3 1 TRUE
## 9471 397 2007-10-22 174.9 1 TRUE
## 9472 397 2007-11-26 226.3 1 TRUE
## 9473 397 2008-02-18 223.5 1 TRUE
## NA.175 NA <NA> NA NA NA
## NA.176 NA <NA> NA NA NA
## NA.177 NA <NA> NA NA NA
## NA.178 NA <NA> NA NA NA
## NA.179 NA <NA> NA NA NA
## NA.180 NA <NA> NA NA NA
## NA.181 NA <NA> NA NA NA
## NA.182 NA <NA> NA NA NA
## NA.183 NA <NA> NA NA NA
## NA.184 NA <NA> NA NA NA
## NA.185 NA <NA> NA NA NA
## NA.186 NA <NA> NA NA NA
## NA.187 NA <NA> NA NA NA
## NA.188 NA <NA> NA NA NA
## NA.189 NA <NA> NA NA NA
## 10960 910 2009-07-03 151.3 1 TRUE
## 10962 910 2009-11-14 151.3 1 TRUE
## 10963 910 2009-12-05 151.3 1 TRUE
## 10969 910 2010-06-21 179.1 1 TRUE
## 10973 1087 2010-01-16 151.3 1 TRUE
## NA.190 NA <NA> NA NA NA
## NA.191 NA <NA> NA NA NA
## 11979 1600 2011-11-22 201.1 1 TRUE
## 12257 2211 2014-03-14 157.3 1 TRUE
## NA.192 NA <NA> NA NA NA
## NA.193 NA <NA> NA NA NA
## NA.194 NA <NA> NA NA NA
## NA.195 NA <NA> NA NA NA
## NA.196 NA <NA> NA NA NA
## NA.197 NA <NA> NA NA NA
## NA.198 NA <NA> NA NA NA
## NA.199 NA <NA> NA NA NA
## NA.200 NA <NA> NA NA NA
## NA.201 NA <NA> NA NA NA
## NA.202 NA <NA> NA NA NA
## NA.203 NA <NA> NA NA NA
## NA.204 NA <NA> NA NA NA
## NA.205 NA <NA> NA NA NA
## NA.206 NA <NA> NA NA NA
## NA.207 NA <NA> NA NA NA
## NA.208 NA <NA> NA NA NA
## NA.209 NA <NA> NA NA NA
## NA.210 NA <NA> NA NA NA
## NA.211 NA <NA> NA NA NA
## NA.212 NA <NA> NA NA NA
## NA.213 NA <NA> NA NA NA
## NA.214 NA <NA> NA NA NA
## NA.215 NA <NA> NA NA NA
## NA.216 NA <NA> NA NA NA
## NA.217 NA <NA> NA NA NA
## NA.218 NA <NA> NA NA NA
## NA.219 NA <NA> NA NA NA
## NA.220 NA <NA> NA NA NA
## NA.221 NA <NA> NA NA NA
## 13317 797 2009-10-20 176.1 1 TRUE
## NA.222 NA <NA> NA NA NA
## NA.223 NA <NA> NA NA NA
## NA.224 NA <NA> NA NA NA
## NA.225 NA <NA> NA NA NA
## NA.226 NA <NA> NA NA NA
## NA.227 NA <NA> NA NA NA
## NA.228 NA <NA> NA NA NA
## 13395 894 2009-11-26 601.5 1 TRUE
## NA.229 NA <NA> NA NA NA
## NA.230 NA <NA> NA NA NA
## NA.231 NA <NA> NA NA NA
## 13465 111 2007-03-10 358.6 1 TRUE
## NA.232 NA <NA> NA NA NA
## NA.233 NA <NA> NA NA NA
## NA.234 NA <NA> NA NA NA
## NA.235 NA <NA> NA NA NA
## NA.236 NA <NA> NA NA NA
## NA.237 NA <NA> NA NA NA
## NA.238 NA <NA> NA NA NA
## NA.239 NA <NA> NA NA NA
dat[dat$Wrong.GFR == TRUE & !is.na(dat$Wrong.GFR), c("Patient", "Date", "MDRD.GFR", "Stage", "Wrong.GFR")]
## Patient Date MDRD.GFR Stage Wrong.GFR
## 5846 1118 2009-11-12 227.7 1 TRUE
## 5847 1118 2014-03-10 217.1 1 TRUE
## 5848 1118 2014-06-16 175.9 1 TRUE
## 6019 1290 2010-09-19 190.9 1 TRUE
## 6020 1290 2010-11-16 190.9 1 TRUE
## 6021 1290 2010-12-15 190.9 1 TRUE
## 6022 1290 2011-03-07 189.9 1 TRUE
## 6023 1290 2011-05-31 189.9 1 TRUE
## 6024 1290 2011-08-27 189.9 1 TRUE
## 6025 1290 2011-11-15 189.9 1 TRUE
## 7795 844 2009-02-04 177.5 1 TRUE
## 7799 844 2010-03-10 175.9 1 TRUE
## 8260 1879 2012-08-15 162.0 1 TRUE
## 9464 397 2007-07-02 226.3 1 TRUE
## 9465 397 2007-07-16 174.9 1 TRUE
## 9467 397 2007-07-30 174.9 1 TRUE
## 9468 397 2007-08-13 174.9 1 TRUE
## 9469 397 2007-09-03 226.3 1 TRUE
## 9471 397 2007-10-22 174.9 1 TRUE
## 9472 397 2007-11-26 226.3 1 TRUE
## 9473 397 2008-02-18 223.5 1 TRUE
## 10960 910 2009-07-03 151.3 1 TRUE
## 10962 910 2009-11-14 151.3 1 TRUE
## 10963 910 2009-12-05 151.3 1 TRUE
## 10969 910 2010-06-21 179.1 1 TRUE
## 10973 1087 2010-01-16 151.3 1 TRUE
## 11979 1600 2011-11-22 201.1 1 TRUE
## 12257 2211 2014-03-14 157.3 1 TRUE
## 13317 797 2009-10-20 176.1 1 TRUE
## 13395 894 2009-11-26 601.5 1 TRUE
## 13465 111 2007-03-10 358.6 1 TRUE
請各位同學選1個生化質,並為他設置連續變項的驗證規則
請同學檢查Stage與MDRD.GFR之關係是否有錯誤
– Stage與GFR之關係:1 - 90以上、2 - 60至90、3 - 30至60、4 - 15至30、5 - 15以下
整理完後,請將整個檔案輸出,並試著在Excel中看看自己找到的異常値
注意,請整理自己的程式碼,增加他的可讀性,這樣未來才有多方協做的機會
#Read data
dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950')
#Rule 1: check date-format
dat$Date = as.Date(dat[,"Date"])
dat$Wrong.Date = is.na(dat$Date)
#Rule 2: check WBC
dat$Wrong.WBC[dat$WBC < 4 | dat$WBC > 9] = TRUE
dat$Wrong.WBC[dat$WBC >= 4 & dat$WBC <= 9] = FALSE
#Rule 3: check Stage & MDRD.GFR
dat$my.Stage[dat$MDRD.GFR >= 90] = 1
dat$my.Stage[dat$MDRD.GFR >= 60 & dat$MDRD.GFR < 90] = 2
dat$my.Stage[dat$MDRD.GFR >= 30 & dat$MDRD.GFR < 60] = 3
dat$my.Stage[dat$MDRD.GFR >= 15 & dat$MDRD.GFR < 30] = 4
dat$my.Stage[dat$MDRD.GFR < 15] = 5
dat$Wrong.Stage = (dat$my.Stage != dat$Stage)
– 先想步驟,好好思考該怎樣做?
– 還記得怎樣了解個案數嗎?可以透過函數「levels()」以及函數「length()」的組合,但在最開始的時候我們要先確定變數『Patient』是否為因子,若不是則必須先轉換為因子
class(dat$Patient)
## [1] "integer"
levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
n.Patient
## [1] 2309
x = rep(NA, n.Patient)
– 還記得上一節課如何教大家寫迴圈函數嗎?先令『i = 1』之後再開始
– 需要特別注意的是,『levels.Patient』是文字向量,而『dat$Patient』則是整數向量,雖然在這個案例中直接檢索是可以的,但最好還是先轉換成同樣的屬性比較不會出錯
– 由於整數轉文字比較不會出錯,所以最好是把『dat$Patient』轉成文字再比較
i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
subdat
## Patient Date MDRD.GFR Stage WBC RBC HB Hct MCV Urea.Nitrogen
## 12329 1 2006-05-12 13.1 5 NA NA NA NA NA NA
## 12330 1 2006-06-19 10.1 5 NA NA 9.4 28.9 NA 61
## 12331 1 2010-07-21 5.1 5 NA NA NA NA NA NA
## Creatinine Uric.Acid Na K Albumin Wrong.Date Wrong.WBC my.Stage
## 12329 5.0 5.6 142 5.7 2.5 FALSE NA 5
## 12330 6.3 NA 143 3.1 NA FALSE NA 5
## 12331 11.2 NA NA NA NA FALSE NA 5
## Wrong.Stage
## 12329 FALSE
## 12330 FALSE
## 12331 FALSE
– 如果個案僅申報一筆資料就不用繼續了,所以必須加入條件判斷
i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
dif = rep(NA, n.date-1)
for (k in 1:(n.date-1)) {
dif[k] = subdat$Date[k+1] - subdat$Date[k]
}
}
dif
## [1] 38 1493
i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
dif = diff(subdat$Date)
}
dif
## Time differences in days
## [1] 38 1493
i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
dif = diff(subdat$Date)
check = dif < 90
}
check
## [1] TRUE FALSE
i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
dif = diff(subdat$Date)
check = dif < 90
}
TRUE %in% check
## [1] TRUE
i = 1
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
dif = diff(subdat$Date)
check = dif < 90
x[i] = TRUE %in% check
} else {
x[i] = FALSE
}
levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
x = rep(NA, n.Patient)
for (i in 1:n.Patient) {
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
dif = diff(subdat$Date)
check = dif < 90
x[i] = TRUE %in% check
} else {
x[i] = FALSE
}
}
x
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
## [12] TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
## [23] FALSE TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
## [34] TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
## [45] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [56] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [67] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [78] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [89] FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE
## [100] TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE
## [111] TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE
## [122] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
## [133] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
## [144] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [155] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## [166] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
## [177] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [188] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [199] FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
## [210] TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [221] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [232] TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [243] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [254] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE
## [265] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [276] TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE
## [287] TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE
## [298] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE
## [309] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
## [320] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
## [331] TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE TRUE FALSE
## [342] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [353] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [364] TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE
## [375] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE
## [386] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE
## [397] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [408] FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE
## [419] TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE
## [430] FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE
## [441] TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## [452] FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE
## [463] TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [474] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [485] FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE
## [496] TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE
## [507] TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE TRUE
## [518] FALSE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
## [529] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
## [540] TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## [551] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE
## [562] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
## [573] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [584] FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE
## [595] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [606] FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE
## [617] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [628] TRUE FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
## [639] TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE
## [650] FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE
## [661] FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
## [672] TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
## [683] FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE
## [694] TRUE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE TRUE
## [705] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [716] TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE
## [727] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [738] FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
## [749] FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE
## [760] TRUE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE
## [771] TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [782] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE
## [793] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
## [804] FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## [815] FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE TRUE
## [826] TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
## [837] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [848] TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE
## [859] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
## [870] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
## [881] FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
## [892] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE
## [903] FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
## [914] TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE FALSE
## [925] FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE
## [936] FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [947] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [958] FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [969] FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [980] TRUE TRUE FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE
## [991] TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [1002] FALSE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE
## [1013] TRUE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE
## [1024] TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE
## [1035] TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE FALSE
## [1046] FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
## [1057] TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
## [1068] TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE
## [1079] FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE FALSE
## [1090] FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
## [1101] TRUE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
## [1112] TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE
## [1123] FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
## [1134] TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE
## [1145] FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE
## [1156] TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE
## [1167] TRUE FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
## [1178] FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE
## [1189] TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE
## [1200] FALSE TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
## [1211] FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE
## [1222] FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE
## [1233] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
## [1244] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [1255] TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE
## [1266] TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
## [1277] FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
## [1288] FALSE TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
## [1299] FALSE TRUE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
## [1310] TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE
## [1321] TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [1332] FALSE TRUE TRUE FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE
## [1343] TRUE TRUE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE TRUE
## [1354] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
## [1365] TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE TRUE FALSE TRUE
## [1376] TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE TRUE TRUE FALSE
## [1387] TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE
## [1398] TRUE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE
## [1409] FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE
## [1420] FALSE TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
## [1431] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
## [1442] FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE
## [1453] FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE
## [1464] FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE
## [1475] TRUE FALSE TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE
## [1486] FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
## [1497] TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE
## [1508] FALSE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE
## [1519] TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE
## [1530] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1541] FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE FALSE FALSE FALSE
## [1552] FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE
## [1563] FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE TRUE
## [1574] TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE
## [1585] TRUE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE
## [1596] TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
## [1607] FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE
## [1618] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE
## [1629] TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE
## [1640] TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE
## [1651] FALSE TRUE FALSE TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE
## [1662] FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE FALSE
## [1673] TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE TRUE
## [1684] FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
## [1695] FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE
## [1706] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE
## [1717] FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE FALSE
## [1728] TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
## [1739] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
## [1750] TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
## [1761] FALSE FALSE FALSE TRUE TRUE FALSE TRUE TRUE FALSE FALSE FALSE
## [1772] TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE
## [1783] FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE
## [1794] FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
## [1805] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE
## [1816] TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
## [1827] TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE
## [1838] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
## [1849] FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE
## [1860] FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE
## [1871] FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE
## [1882] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
## [1893] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1904] FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE
## [1915] TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE
## [1926] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE
## [1937] TRUE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
## [1948] TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE
## [1959] TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
## [1970] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
## [1981] FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
## [1992] TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
## [2003] TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE
## [2014] TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE
## [2025] FALSE TRUE TRUE FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE
## [2036] TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE FALSE TRUE
## [2047] FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
## [2058] FALSE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE FALSE
## [2069] TRUE FALSE TRUE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE
## [2080] TRUE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE
## [2091] FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE
## [2102] FALSE TRUE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE
## [2113] FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
## [2124] TRUE FALSE TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
## [2135] FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE
## [2146] FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE TRUE FALSE FALSE
## [2157] FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE TRUE
## [2168] TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE
## [2179] FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE
## [2190] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
## [2201] TRUE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE
## [2212] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
## [2223] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
## [2234] TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2245] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE
## [2256] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2267] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2278] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2289] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2300] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
levels.Patient[x]
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9"
## [10] "11" "12" "14" "15" "16" "19" "20" "21" "22"
## [19] "24" "25" "26" "28" "32" "33" "34" "35" "36"
## [28] "37" "39" "41" "43" "44" "45" "46" "47" "48"
## [37] "49" "50" "51" "52" "53" "54" "55" "56" "57"
## [46] "58" "59" "60" "61" "62" "63" "64" "65" "66"
## [55] "67" "68" "70" "71" "72" "73" "74" "75" "76"
## [64] "77" "78" "79" "80" "82" "83" "84" "85" "86"
## [73] "87" "90" "91" "92" "94" "95" "97" "98" "99"
## [82] "100" "101" "102" "103" "104" "106" "108" "109" "111"
## [91] "112" "114" "115" "116" "118" "119" "120" "122" "123"
## [100] "124" "125" "126" "127" "128" "130" "131" "132" "133"
## [109] "134" "136" "137" "138" "139" "140" "141" "143" "144"
## [118] "145" "146" "147" "148" "149" "152" "153" "154" "155"
## [127] "156" "157" "158" "159" "161" "162" "163" "164" "165"
## [136] "167" "168" "170" "171" "172" "173" "174" "176" "177"
## [145] "178" "179" "180" "181" "182" "183" "184" "185" "186"
## [154] "187" "191" "192" "193" "194" "195" "197" "198" "200"
## [163] "201" "202" "203" "204" "206" "207" "208" "209" "210"
## [172] "212" "213" "214" "215" "218" "219" "220" "221" "222"
## [181] "223" "224" "225" "226" "227" "228" "229" "230" "231"
## [190] "232" "234" "236" "237" "238" "239" "240" "241" "242"
## [199] "243" "244" "245" "246" "247" "248" "249" "250" "251"
## [208] "252" "253" "254" "255" "256" "257" "258" "259" "260"
## [217] "261" "263" "265" "266" "267" "268" "269" "270" "271"
## [226] "272" "274" "275" "276" "277" "278" "279" "280" "281"
## [235] "283" "284" "286" "287" "288" "289" "290" "292" "294"
## [244] "295" "297" "298" "300" "301" "302" "303" "304" "305"
## [253] "307" "309" "310" "311" "312" "314" "315" "316" "317"
## [262] "318" "319" "320" "321" "323" "324" "325" "326" "327"
## [271] "328" "331" "335" "336" "337" "338" "340" "342" "343"
## [280] "344" "345" "346" "347" "348" "349" "350" "351" "352"
## [289] "353" "354" "355" "357" "358" "359" "360" "361" "362"
## [298] "363" "364" "365" "366" "367" "368" "370" "372" "373"
## [307] "374" "375" "376" "377" "378" "380" "381" "382" "383"
## [316] "384" "386" "387" "388" "389" "390" "391" "392" "393"
## [325] "396" "397" "398" "400" "401" "402" "403" "404" "405"
## [334] "406" "407" "410" "411" "414" "416" "417" "418" "419"
## [343] "420" "422" "423" "426" "427" "428" "431" "432" "433"
## [352] "435" "436" "437" "439" "440" "441" "442" "443" "445"
## [361] "447" "448" "449" "450" "451" "453" "454" "455" "456"
## [370] "459" "460" "461" "462" "463" "465" "466" "467" "468"
## [379] "469" "470" "472" "473" "475" "476" "477" "478" "479"
## [388] "480" "481" "482" "483" "484" "486" "487" "488" "490"
## [397] "491" "492" "494" "495" "496" "497" "498" "500" "502"
## [406] "503" "504" "505" "507" "508" "512" "515" "516" "517"
## [415] "519" "520" "521" "525" "526" "527" "528" "529" "530"
## [424] "531" "533" "534" "535" "536" "537" "539" "540" "542"
## [433] "543" "544" "546" "547" "548" "549" "550" "551" "552"
## [442] "553" "554" "556" "557" "558" "559" "560" "562" "563"
## [451] "564" "565" "566" "567" "568" "570" "571" "572" "574"
## [460] "575" "576" "577" "578" "579" "580" "581" "582" "583"
## [469] "586" "590" "592" "593" "594" "596" "597" "598" "599"
## [478] "600" "601" "602" "603" "604" "605" "607" "609" "610"
## [487] "611" "612" "613" "615" "618" "619" "621" "622" "623"
## [496] "624" "625" "626" "627" "628" "630" "631" "632" "634"
## [505] "636" "638" "639" "641" "643" "644" "645" "646" "647"
## [514] "649" "651" "652" "653" "655" "656" "657" "658" "662"
## [523] "663" "664" "666" "667" "668" "669" "670" "671" "672"
## [532] "677" "678" "679" "680" "681" "682" "684" "686" "689"
## [541] "690" "693" "694" "697" "698" "699" "701" "702" "704"
## [550] "705" "706" "707" "708" "709" "710" "711" "712" "713"
## [559] "714" "716" "720" "721" "722" "723" "726" "728" "729"
## [568] "730" "731" "732" "733" "734" "735" "736" "739" "740"
## [577] "741" "744" "745" "746" "747" "748" "750" "751" "752"
## [586] "753" "757" "758" "760" "763" "764" "765" "766" "769"
## [595] "771" "774" "775" "776" "777" "778" "779" "780" "781"
## [604] "782" "783" "784" "785" "786" "787" "788" "790" "791"
## [613] "793" "794" "795" "796" "797" "798" "799" "800" "801"
## [622] "802" "805" "806" "807" "808" "810" "811" "812" "813"
## [631] "814" "816" "819" "822" "823" "825" "826" "827" "828"
## [640] "829" "830" "831" "832" "834" "835" "836" "837" "838"
## [649] "839" "841" "842" "843" "844" "846" "847" "848" "849"
## [658] "850" "852" "854" "855" "856" "857" "859" "860" "861"
## [667] "862" "864" "865" "866" "867" "868" "869" "870" "871"
## [676] "872" "873" "874" "875" "882" "883" "884" "885" "886"
## [685] "887" "889" "890" "891" "892" "893" "894" "895" "897"
## [694] "898" "899" "901" "902" "905" "906" "908" "910" "912"
## [703] "913" "914" "916" "917" "918" "919" "921" "926" "927"
## [712] "931" "932" "934" "935" "938" "940" "941" "942" "943"
## [721] "945" "946" "948" "949" "950" "951" "952" "953" "954"
## [730] "956" "957" "960" "961" "962" "963" "964" "965" "967"
## [739] "968" "971" "972" "973" "974" "977" "978" "979" "980"
## [748] "981" "983" "984" "988" "989" "991" "992" "993" "994"
## [757] "995" "996" "999" "1000" "1001" "1003" "1004" "1006" "1008"
## [766] "1010" "1013" "1014" "1015" "1016" "1019" "1021" "1022" "1023"
## [775] "1024" "1026" "1028" "1031" "1033" "1034" "1035" "1036" "1037"
## [784] "1038" "1040" "1041" "1042" "1044" "1048" "1049" "1050" "1051"
## [793] "1052" "1053" "1057" "1058" "1062" "1063" "1064" "1067" "1068"
## [802] "1070" "1072" "1073" "1078" "1080" "1081" "1083" "1084" "1086"
## [811] "1087" "1088" "1094" "1096" "1097" "1098" "1099" "1100" "1101"
## [820] "1102" "1104" "1109" "1112" "1115" "1116" "1120" "1121" "1122"
## [829] "1127" "1129" "1131" "1133" "1134" "1138" "1139" "1140" "1142"
## [838] "1144" "1146" "1148" "1149" "1150" "1155" "1156" "1159" "1160"
## [847] "1162" "1163" "1166" "1167" "1169" "1170" "1171" "1173" "1175"
## [856] "1177" "1180" "1181" "1182" "1186" "1187" "1189" "1190" "1192"
## [865] "1193" "1194" "1196" "1197" "1198" "1201" "1204" "1205" "1207"
## [874] "1208" "1209" "1210" "1212" "1213" "1215" "1216" "1218" "1219"
## [883] "1220" "1221" "1223" "1225" "1227" "1228" "1230" "1232" "1233"
## [892] "1234" "1235" "1237" "1238" "1239" "1240" "1241" "1244" "1245"
## [901] "1247" "1248" "1249" "1250" "1251" "1253" "1254" "1255" "1256"
## [910] "1259" "1261" "1264" "1265" "1266" "1270" "1271" "1274" "1275"
## [919] "1276" "1279" "1280" "1283" "1284" "1285" "1286" "1287" "1289"
## [928] "1290" "1292" "1293" "1294" "1297" "1298" "1300" "1301" "1302"
## [937] "1305" "1307" "1310" "1311" "1312" "1313" "1314" "1317" "1318"
## [946] "1319" "1321" "1325" "1326" "1327" "1328" "1330" "1331" "1333"
## [955] "1334" "1336" "1337" "1341" "1342" "1343" "1344" "1347" "1350"
## [964] "1351" "1353" "1358" "1359" "1360" "1361" "1363" "1364" "1365"
## [973] "1367" "1368" "1369" "1373" "1375" "1376" "1378" "1379" "1381"
## [982] "1382" "1384" "1385" "1387" "1390" "1392" "1393" "1395" "1397"
## [991] "1398" "1401" "1402" "1404" "1406" "1410" "1413" "1415" "1416"
## [1000] "1421" "1425" "1426" "1427" "1430" "1434" "1435" "1436" "1437"
## [1009] "1438" "1439" "1443" "1446" "1450" "1452" "1455" "1456" "1457"
## [1018] "1458" "1459" "1463" "1466" "1469" "1472" "1475" "1477" "1480"
## [1027] "1481" "1484" "1485" "1488" "1491" "1496" "1497" "1502" "1503"
## [1036] "1509" "1510" "1514" "1515" "1517" "1519" "1521" "1524" "1525"
## [1045] "1526" "1529" "1530" "1531" "1532" "1533" "1544" "1545" "1547"
## [1054] "1548" "1553" "1556" "1560" "1561" "1565" "1567" "1571" "1572"
## [1063] "1573" "1574" "1575" "1576" "1578" "1579" "1580" "1582" "1584"
## [1072] "1585" "1586" "1588" "1593" "1594" "1596" "1601" "1611" "1613"
## [1081] "1616" "1618" "1622" "1627" "1628" "1629" "1630" "1632" "1635"
## [1090] "1637" "1638" "1639" "1640" "1641" "1645" "1646" "1648" "1650"
## [1099] "1652" "1654" "1655" "1657" "1658" "1659" "1667" "1669" "1670"
## [1108] "1671" "1673" "1674" "1676" "1679" "1682" "1683" "1686" "1690"
## [1117] "1698" "1700" "1702" "1703" "1705" "1707" "1709" "1711" "1713"
## [1126] "1719" "1720" "1723" "1724" "1725" "1728" "1729" "1734" "1736"
## [1135] "1739" "1747" "1750" "1751" "1755" "1760" "1764" "1765" "1767"
## [1144] "1768" "1772" "1774" "1775" "1776" "1777" "1778" "1782" "1784"
## [1153] "1786" "1788" "1791" "1797" "1799" "1805" "1809" "1815" "1816"
## [1162] "1819" "1824" "1827" "1829" "1830" "1831" "1836" "1837" "1848"
## [1171] "1851" "1852" "1855" "1857" "1858" "1861" "1866" "1867" "1868"
## [1180] "1870" "1872" "1874" "1875" "1876" "1877" "1880" "1881" "1891"
## [1189] "1895" "1905" "1908" "1911" "1915" "1916" "1917" "1920" "1924"
## [1198] "1927" "1929" "1931" "1933" "1934" "1936" "1937" "1941" "1942"
## [1207] "1943" "1945" "1946" "1947" "1948" "1950" "1951" "1952" "1953"
## [1216] "1954" "1958" "1959" "1962" "1966" "1967" "1968" "1969" "1973"
## [1225] "1979" "1982" "1984" "1986" "1991" "1992" "1997" "1998" "1999"
## [1234] "2003" "2006" "2007" "2010" "2012" "2013" "2014" "2016" "2017"
## [1243] "2018" "2021" "2022" "2026" "2027" "2031" "2033" "2034" "2036"
## [1252] "2038" "2039" "2042" "2043" "2044" "2046" "2050" "2051" "2052"
## [1261] "2053" "2063" "2065" "2066" "2067" "2069" "2071" "2075" "2077"
## [1270] "2080" "2083" "2084" "2087" "2089" "2093" "2096" "2098" "2101"
## [1279] "2103" "2104" "2106" "2112" "2114" "2115" "2120" "2121" "2124"
## [1288] "2126" "2127" "2131" "2137" "2140" "2142" "2145" "2149" "2150"
## [1297] "2151" "2154" "2161" "2162" "2164" "2166" "2167" "2168" "2169"
## [1306] "2172" "2176" "2177" "2183" "2185" "2186" "2188" "2200" "2201"
## [1315] "2202" "2205" "2207" "2212" "2213" "2214" "2220" "2221" "2222"
## [1324] "2223" "2224" "2232" "2234" "2236" "2249" "2253" "2291"
dat$Wrong.Date_interval = dat$Patient %in% levels.Patient[x]
– 在計算變化量的時候,同時要注意追蹤時間間格
請找出追蹤間格中有平均一個月變化超過2的人,把他找出來並增加一個新的變數『Wrong.GFR_interval』
另外,現在這種極長的迴圈最好使用進度條,上節課教的函數「txtProgressBar()」以及函數「setTxtProgressBar()」不要忘記喔:
n = 100
pb = txtProgressBar(max = n, style=3)
for(i in 1:n) {
Sys.sleep(0.1)
setTxtProgressBar(pb, i)
}
close(pb)
#Read data
dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950')
#Rule 1: check date-format
dat$Date = as.Date(dat[,"Date"])
dat$Wrong.Date = is.na(dat$Date)
dat = dat[dat$Wrong.Date == FALSE,]
#Rule 2: check eGFR change
levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
x = rep(NA, n.Patient)
pb = txtProgressBar(max = n, style = n.Patient)
for (i in 1:n.Patient) {
subdat = dat[dat$Patient==levels.Patient[i],]
n.date = length(subdat$Date)
if (n.date>1) {
diff_eGFR = diff(subdat$MDRD.GFR)
diff_date = as.numeric(diff(subdat$Date), units = 'days') # 注意要轉成數字,否則無法相除
slope = diff_eGFR / diff_date * 30
check = (slope < -2 | slope > 2) # 也可以用「check = abs(slope) > 2」
x[i] = TRUE %in% check
} else {
x[i] = FALSE
}
setTxtProgressBar(pb, i)
}
close(pb)
dat$Wrong.eGFR_change = dat$Patient %in% levels.Patient[x]
– 首先,先創造一個新變項,在這裡我們是直接把舊的變數『Wrong.Date_interval』直接洗掉
dat$Wrong.Date_interval = NA
– 我們先把個案換成第123個人,因為他的變化比較大
i = 123
dat[dat$Patient==levels.Patient[i],c("Patient", "Date", "Wrong.Date_interval")]
## Patient Date Wrong.Date_interval
## 12452 123 2006-08-06 NA
## 12453 123 2006-09-19 NA
## 12454 123 2007-01-02 NA
## 12455 123 2007-02-11 NA
## 12456 123 2007-03-01 NA
## 12457 123 2007-06-26 NA
## 12458 123 2007-07-23 NA
## 12459 123 2007-09-26 NA
## 12460 123 2007-10-26 NA
## 12461 123 2007-12-04 NA
## 12462 123 2007-12-13 NA
## 12463 123 2008-01-26 NA
i = 123
dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][1] = FALSE
dat[dat$Patient==levels.Patient[i],c("Patient", "Date", "Wrong.Date_interval")]
## Patient Date Wrong.Date_interval
## 12452 123 2006-08-06 FALSE
## 12453 123 2006-09-19 NA
## 12454 123 2007-01-02 NA
## 12455 123 2007-02-11 NA
## 12456 123 2007-03-01 NA
## 12457 123 2007-06-26 NA
## 12458 123 2007-07-23 NA
## 12459 123 2007-09-26 NA
## 12460 123 2007-10-26 NA
## 12461 123 2007-12-04 NA
## 12462 123 2007-12-13 NA
## 12463 123 2008-01-26 NA
– 值得注意的是,這位病患在『2007-06-26』、『2007-07-23』、『2007-09-26』這三天分別被申報,其間格分別是27與65,雖然『2007-07-23』必須被核刪,但考慮到刪除這天後,『2007-09-26』與『2007-06-26』就相距92天,這是一個可以接受的日期,所以我們必須想一下,該怎麼解決這件事。
– 記得避免遺漏值!
i = 123
dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][1] = FALSE
n.date = length(dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"])
k = 2
false.dates = dat[dat$Patient==levels.Patient[i] & dat$Wrong.Date_interval == FALSE & !is.na(dat$Wrong.Date_interval),"Date"]
last.date = false.dates[length(false.dates)]
dif = dat[dat$Patient==levels.Patient[i],"Date"][k] - last.date
dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][k] = dif < 90
dat[dat$Patient==levels.Patient[i],c("Patient", "Date", "Wrong.Date_interval")]
## Patient Date Wrong.Date_interval
## 12452 123 2006-08-06 FALSE
## 12453 123 2006-09-19 TRUE
## 12454 123 2007-01-02 NA
## 12455 123 2007-02-11 NA
## 12456 123 2007-03-01 NA
## 12457 123 2007-06-26 NA
## 12458 123 2007-07-23 NA
## 12459 123 2007-09-26 NA
## 12460 123 2007-10-26 NA
## 12461 123 2007-12-04 NA
## 12462 123 2007-12-13 NA
## 12463 123 2008-01-26 NA
– 需要注意的是,如果n.date>1才需要做後續檢查
levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
dat$Wrong.Date_interval = NA
pb = txtProgressBar(max = n.Patient, style=3)
for (i in 1:n.Patient) {
dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][1] = FALSE
n.date = length(dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"])
if (n.date>1) {
for (k in 2:n.date) {
false.dates = dat[dat$Patient==levels.Patient[i] & dat$Wrong.Date_interval == FALSE & !is.na(dat$Wrong.Date_interval),"Date"]
last.date = false.dates[length(false.dates)]
dif = dat[dat$Patient==levels.Patient[i],"Date"][k] - last.date
dat[dat$Patient==levels.Patient[i],"Wrong.Date_interval"][k] = dif < 90
}
}
setTxtProgressBar(pb, i)
}
close(pb)
– 因此請透過類似的方法找出GFR的異常值,如果出現短時間內變化過大的值請把它找出來,之後在檢查時請忽略它!
#Read data
dat = read.csv("data4_1.csv", header = TRUE, fileEncoding = 'CP950')
#Rule 1: check date-format
dat$Date = as.Date(dat[,"Date"])
dat$Wrong.Date = is.na(dat$Date)
dat = dat[dat$Wrong.Date == FALSE,]
#Rule 2: check eGFR change
levels.Patient = levels(as.factor(dat$Patient))
n.Patient = length(levels.Patient)
dat$Wrong.eGFR_change = NA
pb = txtProgressBar(max = n.Patient, style=3)
for (i in 1:n.Patient) {
dat[dat$Patient==levels.Patient[i], "Wrong.eGFR_change"][1] = FALSE
n.date = length(dat[dat$Patient==levels.Patient[i],"Date"])
if (n.date>1) {
for (k in 2:n.date) {
false.dates = dat[dat$Patient==levels.Patient[i] & dat$Wrong.eGFR_change == FALSE & !is.na(dat$Wrong.eGFR_change),"Date"]
last.date = false.dates[length(false.dates)]
diff_date = dat[dat$Patient==levels.Patient[i],"Date"][k] - last.date
diff_date = as.numeric(diff_date, units = 'days') # 注意要轉成數字,否則無法相除
false.eGFRs = dat[dat$Patient==levels.Patient[i] & dat$Wrong.eGFR_change == FALSE & !is.na(dat$Wrong.eGFR_change),"MDRD.GFR"]
last.eGFR = false.eGFRs[length(false.eGFRs)]
diff_eGFR = dat[dat$Patient==levels.Patient[i],"MDRD.GFR"][k] - last.eGFR
dat[dat$Patient==levels.Patient[i],"Wrong.eGFR_change"][k] = abs(slope) > 2
}
}
setTxtProgressBar(pb, i)
}
close(pb)
– 目前為止有跟上進度的同學,應該可以建立一個資料處理pipline,不管原始蒐集的資料為何,都能透過一系列的轉換&品質控制,獲得乾淨的資料
– 你應該已經學會下面的功能: